var webpack = require('webpack')
var path = require('path')


module.exports = {
  mode: 'development', // production
  entry: {
    pageA: './src/pageA',
    pageB: './src/pageB',
    // vendor: ['lodash'],
  },
  output: {
    path: path.resolve(__dirname, './dist'),
    filename: '[name].bundle.js',
    chunkFilename: '[name].chunk.js'
  },
  plugins: [
    // Error: webpack.optimize.CommonsChunkPlugin has been removed, please use config.optimization.splitChunks instead.
    // new webpack.optimize.CommonsChunkPlugin({
    //   name: 'common',
    //   minChunks: 2
    // })
    
    /* // 没效果 ??
    new webpack.optimize.SplitChunksPlugin({
      cacheGroups: {
        // 打包重复出现的代码
        vendor: {
          priority: 10,
          chunks: 'initial',
          test: '/lodash/',
          minChunks: 2,
          maxInitialRequests: 5, // The default limit is too small to showcase the effect
          minSize: 0, // This is example is too small to create commons chunks
          name: 'vendor'
        },
        // 打包第三方类库
        commons: {
          priority: 0,
          name: "commons",
          chunks: "initial",
          minChunks: 2
        }
      }
    }) */
  ],

  optimization: {
    splitChunks: {
      // chunks: 'all', // 必须三选一： "initial" | "all"(默认就是all) | "async" 
      // minSize: 0, // 最小尺寸，默认0
      // minChunks: 2, // 最小 chunk ，默认1
      // maxAsyncRequests: 1,  // 最大异步请求数， 默认1
      // maxInitialRequests: 1,  // 最大初始化请求数，默认1
      // automaticNameDelimiter: '~',
      // name: true,  // 名称，此选项可接收 function
      cacheGroups: {   // 这里开始设置缓存的 chunks
        // default缓存组的优先级(priotity)是负数，因此所有自定义缓存组都可以有比它更高优先级（译注：更高优先级的缓存组可以优先打包所选择的模块）（默认自定义缓存组优先级为0）
        // default: false, 
        // 提取公用代码
        commons: {   // key 为entry中定义的 入口名称
          priority: 0, // 缓存优先级
          chunks: 'initial',  // 必须三选一： "initial" | "all" | "async"(默认就是异步) 
          name: 'commons',  // 要缓存的 分隔出来的 chunk 名称
          minSize: 0,
          minChunks: 2,
          reuseExistingChunk: true   // 可设置是否重用该chunk（查看源码没有发现默认值）
        },
        // 第三方类库
        vendor: { // key 为entry中定义的 入口名称
          priority: 10, // 缓存优先级
          chunks: 'initial', // 必须三选一： "initial" | "all" | "async"(默认就是异步) 
          test: /lodash/, // 正则规则验证，如果符合就提取 chunk
          name: 'vendor', // 要缓存的 分隔出来的 chunk 名称
          minSize: 0,
          // minChunks: Infinity,
          minChunks: 1,
          enforce: true,
          // maxAsyncRequests: 1,  // 最大异步请求数， 默认1
          // maxInitialRequests: 1,  // 最大初始化请求书，默认1
          reuseExistingChunk: true // 可设置是否重用该chunk（查看源码没有发现默认值）
        }
      }
    },
    // runtimeChunk: true // 做持久缓存
  }
}